package org.cbyyx.tc.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.cbyyx.tc.model.dto.productRequest.ProductCreateRequest;
import org.cbyyx.tc.model.dto.productRequest.ProductQueryRequest;
import org.cbyyx.tc.model.dto.productRequest.ProductUpdateRequest;
import org.cbyyx.tc.model.entity.Products;
import org.cbyyx.tc.model.vo.productResponse.ProductDetailVO;
import org.cbyyx.tc.model.vo.productResponse.ProductsVO;

public interface ProductsService extends IService<Products> {
    /**
     * 创建商品
     * @param request 商品创建请求
     * @return 是否创建成功
     */
    Boolean createProduct(ProductCreateRequest request);
    /**
     * 获取商品详情
     * @param id 商品ID
     * @return 商品详情
     */
    ProductDetailVO getProductDetail(Long id);
    /**
     * 更新商品
     * @param request 商品更新请求
     * @return 是否更新成功
     */
    Boolean updateProduct(ProductUpdateRequest request);
    /**
     * 删除商品
     * @param id 商品ID
     * @return 是否删除成功 
     */
    Boolean updateStock(Long id, Integer quantity);
    /**
     * 更新商品价格
     * @param id 商品ID
     * @param price 商品价格
     * @return 是否更新成功
     */
    Boolean updatePrice(Long id, Long price);
    /**
     * 更新商品状态
     * @param id 商品ID
     * @param status 商品状态
     * @return 是否更新成功
     */
    Boolean updateStatus(Long id, String status);
    /**
     * 删除商品
     * @param id 商品ID
     * @return 是否删除成功
     */
    Boolean deleteProduct(Long id);
    /**
     * 商品列表
     * @param request 商品列表请求
     * @return 商品列表
     */
    Page<ProductsVO> listProducts(ProductQueryRequest request);
    /**
     * 获取商品库存
     * @param id 商品ID
     * @return 商品库存
     */
    Integer getStock(Long id);
    /**
     * 搜索商品
     * @param keyword 关键字
     * @return 商品列表
     */
    Page<ProductsVO> searchProducts(String keyword);
    /**
     * 获取商品分类
     * @param categoryId 分类ID
     * @return 商品列表
     */
    Page<ProductsVO> getProductsByCategory(Long categoryId);
    /**
     * 获取热门商品
     * @return 热门商品列表
     */
    Page<ProductsVO> getHotProducts();
    /**
     * 获取商品销量
     * @param productId 商品ID
     * @return 商品销量
     */
    Integer getProductSales(Long productId);
    /**
     * 增加商品销量
     * @param productId 商品ID
     * @param quantity 增加的销量数量
     * @return Boolean 操作是否成功
     */
    Boolean increaseSales(Long productId, Integer quantity);

    /**
     * 减少商品库存
     * @param id 商品ID
     * @param quantity 减少的库存数量
     * @return Boolean 操作是否成功
     */
    Boolean decreaseStock(Long id, Integer quantity);

    /**
     * 增加商品库存
     * @param id 商品ID
     * @param quantity 增加的库存数量
     * @return Boolean 操作是否成功
     */
    Boolean increaseStock(Long id, Integer quantity);
}
